home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / bin / foo2hiperc-wrapper < prev    next >
Text File  |  2008-09-09  |  16KB  |  665 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2hiperc-wrapper.in,v 1.10 2008/04/30 21:19:34 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Oki Data C3200
  27. # Oki Data C3300
  28. # Oki Data C3400
  29. # Oki Data C5100
  30. # Oki Data C5250
  31. # Oki Data C5500
  32. #
  33.  
  34. PROGNAME="$0"
  35. BASENAME=`basename $PROGNAME`
  36. PREFIX=/usr
  37. SHARE=$PREFIX/share/foo2hiperc
  38. PATH=$PATH:/sw/bin:/opt/local/bin
  39. PATH=$PATH:.
  40.  
  41. #
  42. #    Log the command line, for debugging and problem reports
  43. #
  44. if [ -x /usr/bin/logger ]; then
  45.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  46. fi
  47.  
  48. usage() {
  49.     cat <<EOF
  50. Usage:
  51.     $BASENAME [options] [ps-file]
  52.  
  53.     Foomatic printer wrapper for the foo2hiperc printer driver.
  54.     This script reads a Postscript ps-file or standard input
  55.     and converts it to a Oki Data HIPERC stream for the
  56.     C3200/C3400/C5100/C5250n/C5500 printers.
  57.  
  58. Normal Options:
  59. -c                Print in color (else monochrome)
  60. -d duplex         Duplex code to send to printer [$DUPLEX]
  61.                     1=off, 2=longedge, 3=shortedge
  62. -m media          Media code to send to printer [$MEDIA]
  63.                     0=plain 1=labels 2=transparency
  64. -p paper          Paper code [$PAPER]
  65.                     1=A4, 2=letter, 3=legal, 5=A5, 6=B5, 7=A6, 8=envMonarch
  66.                     9=envDL, 10=envC5, 11=env#10, 12=executive, 13=env#9
  67. -n copies         Number of copies [$COPIES]
  68. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  69. -s source         Source code to send to printer [$SOURCE]
  70.                     0=auto 1=tray1 2=tray2 3=multi 4=manual
  71.             Code numbers may vary with printer model.
  72. -t                Draft mode.  Every other pixel is white.
  73. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  74.                   Print with N-up (requires psutils)
  75. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  76.  
  77. Printer Tweaking Options:
  78. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  79. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  80. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  81.                   0=no, 1=Y, 2=X, 3=XY
  82. -P                Do not output START_PLANE codes.  May be needed by some
  83.                   monochrome-only printers.
  84. -X padlen         Add extra zero padding to the end of BID segments [16]
  85. -Z compressed     Use uncompressed (0) or compressed (1) data [0]
  86.  
  87. Color Tweaking Options:
  88. -g gsopts         Additional options to pass to Ghostscript, such as
  89.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  90. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  91.                   adjust colors using the setcolorrendering PS operator.
  92.                   $SHARE/icm/ will be searched for profile.icm.
  93. -I intent         Select profile intent from ICM file [$INTENT]
  94.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  95. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  96.                   color correction using the setcolortransfer PS operator.
  97.  
  98. Debugging Options:
  99. -S plane          Output just a single color plane from a color print [all]
  100.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  101. -D lvl            Set Debug level [$DEBUG]
  102. -V                $VERSION
  103. EOF
  104.  
  105.     exit 1
  106. }
  107.  
  108. #
  109. #       Report an error and exit
  110. #
  111. error() {
  112.     echo "$BASENAME: $1" >&2
  113.     exit 1
  114. }
  115.  
  116. dbgcmd() {
  117.     if [ $DEBUG -ge 1 ]; then
  118.         echo "$@" >&2
  119.     fi
  120.     "$@"
  121. }
  122.  
  123. #
  124. #    N-up-ify the job.  Requires psnup from psutils package
  125. #
  126. nup() {
  127.     case "$NUP" in
  128.     [2368]|1[0458])
  129.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  130.     ;;
  131.     [49]|1[26])
  132.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  133.     ;;
  134.     *)
  135.     error "Illegal call to nup()."
  136.     ;;
  137.     esac
  138. }
  139.  
  140. #
  141. #       Process the options
  142. #
  143.  
  144. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  145. # fallback to whatever the Linux distro has installed (usually 7.07)
  146. #
  147. # N.B. := operator used here, when :- would be better, because "ash"
  148. # doesn't have :-
  149. if gs.foo -v >/dev/null 2>&1; then
  150.         GSBIN=${GSBIN:-gs.foo}
  151. else
  152.         GSBIN=${GSBIN:-gs}
  153. fi
  154.  
  155. CMDLINE="$*"
  156. DEBUG=0
  157. DUPLEX=1
  158. COLOR=
  159. COLORMODE=default
  160. MODEL=0
  161. QUALITY=1
  162. QUALITY=wts
  163. MEDIA=0
  164. COPIES=1
  165. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  166. test "$PAPER" || PAPER=2
  167. RES=600x600
  168. SOURCE=0
  169. NUP=
  170. CLIP_UL=
  171. CLIP_LR=
  172. CLIP_LOG=
  173. BC=
  174. AIB=
  175. NOPLANES=
  176. COLOR2MONO=
  177. GAMMAFILE=default
  178. INTENT=0
  179. GSOPTS=
  180. EXTRAPAD=
  181. SAVETONER=
  182. NUP_ORIENT=
  183. COMPRESSED=
  184. GSDEV=-sDEVICE=pbmraw
  185. # What mode to use if the user wants us to pick the "best" mode
  186. case `$GSBIN --version` in
  187. 7*)    DEFAULTCOLORMODE=10
  188.     DEFAULTCOLORMODE=10
  189.     ;;
  190. 8.1*)
  191.     DEFAULTCOLORMODE=10
  192.     QUALITY=1
  193.     ;;
  194. *)    DEFAULTCOLORMODE=10
  195.     ;;
  196. esac
  197. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Z:Vh?" opt
  198. do
  199.     case $opt in
  200.     b)    GSBIN="$OPTARG";;
  201.     c)    COLOR=-c;;
  202.     d)    DUPLEX="$OPTARG";;
  203.     g)    GSOPTS="$GSOPTS $OPTARG";;
  204.     m)    MEDIA="$OPTARG";;
  205.     n)    COPIES="$OPTARG";;
  206.     p)    PAPER="$OPTARG";;
  207.     q)    QUALITY="$OPTARG";;
  208.     r)    RES="$OPTARG";;
  209.     s)    SOURCE="$OPTARG";;
  210.     t)    SAVETONER="-t";;
  211.     z)    MODEL="$OPTARG";;
  212.     l)    CLIP_LR="-l $OPTARG";;
  213.     u)    CLIP_UL="-u $OPTARG";;
  214.     L)    CLIP_LOG="-L $OPTARG";;
  215.     A)    AIB=-A;;
  216.     B)    BC=-B;;
  217.     C)    COLORMODE="$OPTARG";;
  218.     S)    COLOR2MONO="-S$OPTARG";;
  219.     D)    DEBUG="$OPTARG";;
  220.     G)    GAMMAFILE="$OPTARG";;
  221.     I)    INTENT="$OPTARG";;
  222.     P)    NOPLANES=-P;;
  223.     X)    EXTRAPAD="-X $OPTARG";;
  224.     Z)    COMPRESSED="-Z $OPTARG";;
  225.     [234689])    NUP="$opt";;
  226.     [57])    error "Can't find acceptable layout for $opt-up";;
  227.     1)    case "$OPTARG" in
  228.         [024568])    NUP="1$OPTARG";;
  229.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  230.         esac
  231.         ;;
  232.     o)    case "$OPTARG" in
  233.         l*)    NUP_ORIENT=-l;;
  234.         s*)    NUP_ORIENT=-r;;
  235.         p*|*)    NUP_ORIENT=;;
  236.         esac;;
  237.     V)    echo "$VERSION"; foo2hiperc -V; foo2zjs-pstops -V; exit 0;;
  238.     h|\?)
  239.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  240.             echo "Illegal command:"
  241.             echo "    $0 $CMDLINE"
  242.             echo
  243.         fi
  244.         usage;;
  245.     esac
  246. done
  247. shift `expr $OPTIND - 1`
  248.  
  249. #
  250. # If there is an argument left, take it as the file to print.
  251. # Else, the input comes from stdin.
  252. #
  253. if [ $# -ge 1 ]; then
  254.     if [ "$LPJOB" = "" ]; then
  255.     : # LPJOB="$1"
  256.     fi
  257.     exec < $1
  258. fi
  259.  
  260. #
  261. case "$QUALITY" in
  262. 0)
  263.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  264.     ;;
  265. 1)
  266.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  267.     ;;
  268. 2)
  269.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  270.     ;;
  271. wts)
  272.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  273.     ;;
  274. esac
  275.  
  276. #
  277. #    Validate model code
  278. #
  279. case "$MODEL" in
  280. 0|1)    ;;
  281. *)    error "Unknown model code $MODEL";;
  282. esac
  283.  
  284. #
  285. #    Validate media code
  286. #
  287. case "$MEDIA" in
  288. 0|plain)    MEDIA=0;;
  289. 1|labels)    MEDIA=1;;
  290. 2|transparency)    MEDIA=2;;
  291. [0-9]*)        ;;
  292. *)        error "Unknown media code $MEDIA";;
  293. esac
  294.  
  295. #
  296. #    Validate source (InputSlot) code
  297. #
  298. case "$SOURCE" in
  299. 1|tray1)    SOURCE=1;;
  300. 2|tray2)    SOURCE=2;;
  301. 3|multi)    SOURCE=3;;
  302. 4|manual)    SOURCE=4;;
  303. [0-9]*)        ;;
  304. *)        error "Unknown source code $SOURCE";;
  305. esac
  306.  
  307. #
  308. #    Validate Duplex code
  309. #
  310. case "$DUPLEX" in
  311. 1|off|none)    DUPLEX=1;;
  312. 2|long*)    DUPLEX=2;;
  313. 3|short*)    DUPLEX=3;;
  314. [0-9]*)        ;;
  315. *)        error "Unknown duplex code $DUPLEX";;
  316. esac
  317.  
  318. #
  319. #    Validate Resolution
  320. #
  321. case "$RES" in
  322. 300x300)    ;;
  323. 600x600)    ;;
  324. 1200x600)    ;;
  325. 1200x1200)    ;;
  326. 600x1200)    ;;
  327. *)        error "Illegal resolution $RES";;
  328. esac
  329.  
  330. #
  331. #    Figure out the paper dimensions in pixels/inch, and set the
  332. #    default clipping region.  Unfortunately, this is a trouble
  333. #    area for ZjStream printers.  Various versions of ZjS print
  334. #    engines react differently when asked to print into their
  335. #    unprintable regions.
  336. #
  337. set_clipping() {
  338.     ulx=$1; uly=$2
  339.     lrx=$3; lry=$4
  340.  
  341.     # Set clipping region if it isn't already set
  342.     if [ "$CLIP_UL" = "" ]; then
  343.     case "$RES" in
  344.     300x300)    ulx=`expr $ulx / 4`; uly=`expr $uly / 2`;;
  345.     600x600)    ulx=`expr $ulx / 2`;;
  346.     600x1200)    ulx=`expr $ulx / 2`; uly=`expr $uly \* 2`;;
  347.     2400x600)    ulx=`expr $ulx \* 2`;;
  348.     esac
  349.     CLIP_UL="-u ${ulx}x${uly}"
  350.     fi
  351.     if [ "$CLIP_LR" = "" ]; then
  352.     case "$RES" in
  353.     300x300)    lrx=`expr $lrx / 4`; lry=`expr $lry / 2`;;
  354.     600x600)    lrx=`expr $lrx / 2`;;
  355.     600x1200)    lrx=`expr $lrx / 2`; lry=`expr $lry \* 2`;;
  356.     2400x600)    lrx=`expr $lrx \* 2`;;
  357.     esac
  358.     CLIP_LR="-l ${lrx}x${lry}"
  359.     fi
  360. }
  361.  
  362. case "$PAPER" in
  363. Custom*)
  364.         #%%BeginFeature: *CustomPageSize True
  365.         #216
  366.         #360
  367.         #0
  368.         #0
  369.         #0
  370.         #pop pop pop pop pop
  371.  
  372.         #%%BeginFeature: *CustomPageSize True
  373.         #792.000000 612.000000 1 0.000000 0.000000
  374.         #pop pop pop pop pop
  375.  
  376.         if [ $DEBUG = 0 ]; then
  377.             TMPFILE=/tmp/cus$$
  378.         else
  379.             TMPFILE=/tmp/custom.ps
  380.         fi
  381.         cat >$TMPFILE
  382.         exec <$TMPFILE
  383.  
  384.         tmp=`head -n 10000 $TMPFILE \
  385.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  386.             | tr '\n' ' '`
  387.         case "$tmp" in
  388.         [0-9]*\ [0-9]*)
  389.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  390.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  391.             ;;
  392.         *)
  393.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  394.             error "Custom page size [XY]DIM != 1-99999"
  395.             ;;
  396.         esac
  397.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  398.         YDIM=`dc -e "$YDIM 600* 72/p"`
  399.         PAPER=21;        paper=letter;
  400.                 set_clipping 2 100     2 100
  401.         ;;
  402. 1|a4|A4)    PAPER=1;    paper=a4;        XDIM="9920";  YDIM="7016"
  403.         set_clipping 150 100    150 100
  404.         ;;
  405. 2|letter)    PAPER=2;    paper=letter;    XDIM="10200"; YDIM="6600"
  406.         set_clipping 150 100    150 100
  407.         ;;
  408. 3|legal)    PAPER=3;    paper=legal;     XDIM="10200"; YDIM="8400"
  409.         set_clipping 150 100    150 100
  410.         ;;
  411. 5|a5|A5)    PAPER=5;    paper=a5;        XDIM="6992";  YDIM="4960"
  412.         set_clipping 150 100    150 100
  413.         ;;
  414. 6|b5jis|B5jis)    PAPER=6;    paper=b5;        XDIM="8598";  YDIM="6070"
  415.         set_clipping 150 100    150 100
  416.         ;;
  417. 7|a6|A6)    PAPER=7;    paper=a6;        XDIM="4960";  YDIM="3496"
  418.         set_clipping 150 100    150 100
  419.         ;;
  420. 8|envMonarch)    PAPER=8;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  421.         set_clipping 150 100    150 100
  422.         ;;
  423. 9|envDL)    PAPER=9;    paper=envDL;     XDIM="5200";  YDIM="5200"
  424.         set_clipping 150 100    150 100
  425.         ;;
  426. 10|envC5)    PAPER=10;    paper=envC5;     XDIM="7650";  YDIM="5408"
  427.         set_clipping 150 100    150 100
  428.         ;;
  429. 11|"env#10")    PAPER=11;    paper=env10;     XDIM="4950";  YDIM="5700"
  430.         set_clipping 150 100    150 100
  431.         ;;
  432. 12|executive)    PAPER=12;    paper=executive; XDIM="8700";  YDIM="6300"
  433.         set_clipping 150 100    150 100
  434.         ;;
  435. 13|"env#9")    PAPER=13;    paper=env9;      XDIM="4496";  YDIM="5324"
  436.         set_clipping 150 100    150 100
  437.         ;;
  438. *)        error "Unimplemented paper code $PAPER";;
  439. esac
  440. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  441. PAPERSIZE="-sPAPERSIZE=$paper";
  442.  
  443. case "$RES" in
  444. 300x300)    XDIM=`expr $XDIM / 4`; YDIM=`expr $YDIM / 2`;;
  445. 600x600)    XDIM=`expr $XDIM / 2`;;
  446. 1200x600)    ;;
  447. 1200x1200)    YDIM=`expr $YDIM \* 2`;;
  448. 600x1200)    XDIM=`expr $XDIM / 2`; YDIM=`expr $YDIM \* 2`;;
  449. esac
  450. DIM="${XDIM}x${YDIM}"
  451.  
  452. #
  453. # Filter thru psnup if N-up printing has been requested
  454. #
  455. case $NUP in
  456. [234689]|1[024568])    PREFILTER="nup";;
  457. *)            PREFILTER=cat;;
  458. esac
  459. if [ "$DEBUG" -ge 9 ]; then
  460.     PREFILTER="tee /tmp/$BASENAME.ps"
  461. fi
  462.  
  463. #
  464. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  465. #    then convert the ICC color profile to a Postscript CRD,
  466. #    then prepend it to the users job.  Select the intent
  467. #    using the -I option.
  468. #
  469.  
  470. create_crd() {
  471.     #
  472.     # Create a Postscript CRD
  473.     #
  474.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  475.     if [ -x $ICC2PS ]; then
  476.     case "$GAMMAFILE" in
  477.     none | none.icm | */none.icm)
  478.         ;;
  479.     *)
  480.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  481.         || error "Problem converting .ICM file to Postscript"
  482.         ;;
  483.     esac
  484.  
  485.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  486.     cat > $ICCTMP.usecie.ps <<-EOF
  487.         %!PS-Adobe-3.0
  488.         <</UseCIEColor true>>setpagedevice
  489.     EOF
  490.     if [ "$QUALITY" = wts ]; then
  491.         cat >> $ICCTMP.usecie.ps <<-EOF
  492.         << /UseWTS true >> setuserparams
  493.         <<
  494.             /AccurateScreens true
  495.             /HalftoneType 1
  496.             /HalftoneName (Round Dot Screen) cvn
  497.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  498.             /Frequency 137
  499.             /Angle 37
  500.         >> sethalftone
  501.         EOF
  502.     fi
  503.     cat > $ICCTMP.selcrd.ps <<-EOF
  504.         /Current /ColorRendering findresource setcolorrendering
  505.     EOF
  506.     case "$GAMMAFILE" in
  507.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  508.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  509.     esac
  510.     else
  511.     GAMMFILE=
  512.     fi
  513. }
  514.  
  515. if [ $DEBUG -gt 0 ]; then
  516.     ICCTMP=/tmp/icc
  517. else
  518.     ICCTMP=/tmp/icc$$
  519. fi
  520.  
  521. if [ "" = "$COLOR" ]; then
  522.     COLORMODE=
  523.     GAMMAFILE=
  524. else
  525.     case "$COLORMODE" in
  526.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  527.     esac
  528.     case "$GAMMAFILE" in
  529.     default)    GAMMAFILE=samclp300-0.icm;;
  530.     esac
  531. fi
  532.  
  533. CRDBASE="$PREFIX/share/foo2hiperc/crd"
  534. case "$MODEL" in
  535.     0)    model=CLP-300;;
  536.     1)    model=CLP-600;;
  537. esac
  538. case "$RES" in
  539.     600x600)    SCREEN=$model-600x600cms2;;
  540.     1200x600)    SCREEN=$model-1200x600cms2;;
  541.     1200x1200)    SCREEN=$model-1200x1200cms2;;
  542. esac
  543.  
  544. PSTOPS_OPTS="-n"
  545.  
  546. case "$COLORMODE" in
  547. 0|"")
  548.     # Monochrome
  549.     ;;
  550. 10|icm)
  551.     # Use old ICM method
  552.     AIB=-A
  553.     BC=-B
  554.     case "$GAMMAFILE" in
  555.     none | none.icm | */none.icm)
  556.     create_crd
  557.     ;;
  558.     *.icm|*.ICM|*.icc|*.ICC)
  559.     #
  560.     # Its really an .ICM file, not a gamma file.
  561.     #
  562.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  563.     #
  564.     if [ -r "$GAMMAFILE" ]; then
  565.         create_crd
  566.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  567.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  568.         create_crd
  569.     else
  570.         GAMMAFILE=
  571.     fi
  572.     ;;
  573.     esac
  574.     ;;
  575. 1|crd)
  576.     # CRD
  577.     GAMMAFILE=""
  578.     GAMMAFILE="$GAMMAFILE $CRDBASE/${model}cms"
  579.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  580.     ;;
  581. *.crd)
  582.     GAMMAFILE="$CRDBASE/prolog.ps"
  583.     if [ -f $COLORMODE ]; then
  584.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  585.     elif [ -f $CRDBASE/$COLORMODE ]; then
  586.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  587.     else
  588.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  589.     fi
  590.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  591.     ;;
  592. *)
  593.     error "Unknown color method '$COLORMODE'"
  594.     ;;
  595. esac
  596.  
  597. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  598.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  599. fi
  600.  
  601. if [ "" != "$COLOR" ]; then
  602.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  603.     # Faster, but can't handle AllIsBlack or BlackClears
  604.     GSDEV=-sDEVICE=pksmraw
  605.     else
  606.     # Can't handle different size pages
  607.     GSDEV=-sDEVICE=bitcmyk
  608.     fi
  609. fi
  610.  
  611. #
  612. #    Figure out USERNAME
  613. #
  614. if [ "$LPUSER" != "" ]; then
  615.     USER="$LPUSER@$LPHOST"
  616. else
  617.     USER=""
  618. fi
  619.  
  620. #
  621. #    Main Program, just cobble together the pipeline and run it
  622. #
  623. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  624. #    (some versions?) of Ghostscript where Postscript's stdout gets
  625. #    intermingled with the printer drivers output, resulting in
  626. #    corrupted image data.
  627. #
  628. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  629.  
  630. foo2zjs-pstops $PSTOPS_OPTS | \
  631. $PREFILTER \
  632. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  633.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  634. | foo2hiperc -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  635.         $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  636.         -J "$LPJOB" -U "$USER" \
  637.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD $COMPRESSED -D$DEBUG
  638.  
  639. #
  640. #    Log the command line, for debugging and problem reports
  641. #
  642. if [ -x /usr/bin/logger ]; then
  643.     logger -t "$BASENAME" -p lpr.info -- \
  644.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  645.     logger -t "$BASENAME" -p lpr.info -- \
  646.     "foo2hiperc -r$RES -g$DIM -p$PAPER -m$MEDIA \
  647. -n$COPIES -d$DUPLEX -s$SOURCE $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  648. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD $COMPRESSED"
  649. fi
  650.  
  651. #
  652. #    Remove cruft
  653. #
  654. if [ $DEBUG -eq 0 ]; then
  655.     for i in crd.ps log usecie.ps selcrd.ps
  656.     do
  657.     file="$ICCTMP.$i"
  658.     [ -f $file ] && rm -f $file
  659.     done
  660.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  661.     [ -f "$TMPFILE2" ] && rm -f $TMPFILE2
  662. fi
  663.  
  664. exit 0
  665.